package com.cfs.dao.sys;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.springframework.beans.factory.BeanFactory;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;

import com.util.ExcelUtil;
import com.cfs.po.Exp;
import com.cfs.po.sys.CommonBean;
import com.cfs.po.sys.GenRes;
import com.cfs.po.sys.Org;


/**
 * 组织管理dao
 * @author Zhangjie
 * @since 2015-05-23
 * @version 1.0
 */
public interface OrgDao{

	/**
	 * One ROW
	 * 
	 * @param org
	 */
	public int add(Org org);

	/**
	 * ROW 批量添加
	 * @param orgs
	 */
	public GenRes add(Org[] orgs);
	/**
	 * 批量更新
	 * 
	 * @param org 
	 */
	public GenRes update(Org[] orgs);

	/**
	 * 批量删除
	 * 
	 * @param id
	 */
	public GenRes delete(long[] ids);

	/**
	 * ID 查询
	 * @param id
	 */
	public Org get(Long id);

	/**
	 * 根据父组织ids获取子组织(通用)
	 * @return Org[]
	 */
	public Org[] getSub(String parentIds);


	/**
	 * 根据父组织ids获取子组织(组织管理)
	 * @return Org[]
	 */
	public Org[] getAllSub(String parentIds);

	/**
	 * 移动组织
	 */
	public GenRes move2(Long id, Long move2id);

	/**
	 * 禁用/激活组织
	 */
	public GenRes forbidOrg(long id);

	/**
	 * 获取所有
	 * @return
	 */
	public List<Org> getOrgs();
	
	/**
	 * 初始化map
	 */
	public void initOrgs();	

	/**
	 * 根据levels查询组织
	 * @param levels
	 * @return
	 */
	public Org[] queryByLevels(int levels);

	/**
	 * 分公司查办事处
	 */
	public Org[] getAllAgency(long id);

	/**
	 * 分公司查片区
	 */
	public Org[] getAllArea(long id);

	/**
	 * 分公司查门店
	 */
	public Org[] getAllPoint(long id);

	/**
	 * 办事处查询门店
	 */
	public Org[] getAgencyPoint(long id);

	/**
	 * 组织机构模糊查询
	 */
	public Org[] getOrgByName(Org org);

	/**
	 * 组织机构导入
	 * @param filePath
	 * @return
	 */
	public void initOrgs(String filePath);
	
	/**
	 * 冰洗二期需求新增
	 * 根据所提供的组织信息，查询该
	 * 组织下所有门店信息
	 * @param id 组织id
	 * @return org[] 门店对象数组 ,未查询到返回空数组
	 */
	 public Org[] getPointByOrg(long id);
	 
	/**
	 * 冰洗二期需求新增
	 * 根据登录的组织id及组织层级信息，获取其
	 * 关联子组织信息
	 * 1.总部查分公司
	 * 2.分公司查办事处
	 * 3.办事处查片区
	 * 4.片区查门店
	 * 5.门店自查
	 * @param id 组织id
	 * @param level 组织层级 
	 * 1.总部 2.分公司 3.办事处 4.片区  5.门店
	 * @return org[] 组织对象数组 ,未查询到返回空数组
	 */
	 public Org[] getSubOrgArrays(long id,int level); 
	 
		 
    public Long[] getPointsByOrgs(long id,int level);

    /**
	 * 冰洗二期需求新增
	 * 根据提供的组织id数组，获取其
	 * 组织下的所有门店id数组集合
	 * @param Long[] ids 待获取门店的父级组织ID
	 * 1.总部 2.分公司 3.办事处 4.片区  5.门店
	 * @return Long[] 门店对象id数组 ,未查询到返回空数组
	 */
    public Long[] getPointsByOrgs(Long[] ids);

    /**
	 * 冰洗二期需求新增(辅助)
	 * 根据登录的组织id及组织层级信息，获取其
	 * 父级别组织名称
	 * 1.总部查分公司
	 * 2.分公司查办事处
	 * 3.办事处查片区
	 * 4.片区查门店
	 * 5.门店自查
	 * @param id 登录人组织id
	 * @param level 组织层级 
	 * 1.总部 2.分公司 3.办事处 4.片区  5.门店
	 * @return String 父级别组织名称
	 */
	public String getCurOrgParentName(long id,int level);
}
